package com.fzkj.nio.channel;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * 完成文件复制
 */
public class FileCopy {

    /**
     * 也可以使用tranferFrom和transferTo完成不同通道间的数据传递，就相当于复制粘贴
     * @param args
     */

    public static void main(String[] args) {
        String sourcePath = "src/com/fzkj/nio/channel/data.txt";
        String targetPath = "E:/data.txt";

        try{

            // 1、获得字节输入流和字节输出流
            FileInputStream fis = new FileInputStream(sourcePath);
            FileOutputStream fos = new FileOutputStream(targetPath);
            // 2、获得文件输出和输入管道
            FileChannel isChannel = fis.getChannel();
            FileChannel osChannel = fos.getChannel();
            // 3、获得缓冲区
            ByteBuffer buffer = ByteBuffer.allocate(1024);
            while(true){
                // 先清空缓冲区，上一次循环的
                buffer.clear();
                // 读数据进来
                int flag = isChannel.read(buffer);
                if (flag == -1){
                    break;
                }
                // 切换为读模式
                buffer.flip();
                // 将缓冲区写入到输出管道中
                osChannel.write(buffer);
            }
            System.out.println("文件复制完成");
        }catch (Exception e){
            e.printStackTrace();
        }
    }

}
